博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jsp分页技术的实现
阅读量:2063 次
发布时间:2019-04-29

本文共 6786 字,大约阅读时间需要 22 分钟。

这是我们所要的效果

但是怎么用代码实现呢,那摩让我们先来分析一下吧!

第一步分析我们做分页需要什么数据:

我们从两个方向来分析:1 页面方向,2 servlet方向

一 ,页面方向

1 当前页 currPageCode

2  总 页数 totalPage

3一页中的记录数据 datas

二,servlet方向

1 当前页 currPageCode

2  总页数 totalPage

3 每页记录数 pagesize

4 一共多少条记录 totalRecord

5 一页中的记录数据 datas

6当前页第一条记录的行数 currPageBeginIndex

7 url

哦了

那摩我们来写一个JavaBean吧

public class PageBean
{ private int cp;//当前页 private int pc;//可以通过每页记录数和共多少条记录得到 (dt%md ==0 )?dt/md : dt/md+1 一共多少页 private int md;//每页记录数 private List
pd;//页中的记录数据  private int dt;//一共多少条记录 private int cd;//可以通过每页记录是*(当前页数-1) + 1得到,当前页第一条记录的行数 private String url;//为了清楚起见,我就没有粘上我的setget方法}
嗯,有了javabean了,那摩就先让我们写一下servlet吧!

public String findAll(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {						 /*		  * 1 通过页面回传的当前页信息设置当前页		  * 2 设置每页所显示的数据		  * 3 调用servlce的findAll方法获得一共多少条记录及当前页的数据		  * 		  */		 PageBean
pb = new PageBean
(); if(request.getParameter("cp") != null && !request.getParameter("cp").trim().isEmpty()) { int cp = Integer.parseInt(request.getParameter("cp")); pb.setCp(cp); } else { pb.setCp(1); } pb.setMd(10); pb.setPd(service.findAll(pb.getCd(),pb.getMd())); pb.setDt(service.count()); String url = getUrl(request); pb.setUrl(url); request.setAttribute("pb",pb); return "f:list.jsp"; }
嗯,有了数据了,这个方法会转发找list.jsp页面中,我们来看该页的技术点

	

客户列表

客户姓名 性别 生日 手机 邮箱 描述 操作
${customer.cname } ${customer.gender } ${customer.birthday} ${customer.cellphone } ${customer.email } ${customer.description } 编辑 删除
第${requestScope.pb.cp }页/共 ${pb.pc }页
">首页
上一页
<%-- 用来进行中间页码的显示及使用超链接所带来的的问题的解决方案 如何显示页码呢,我们其实只需要两个数据,begin和end就哦了, 我们常见的百度页面有什么特点呢,你可以去看看我就不多说了;下面我给出他的计算公式: 如果总页数<=10(列表长度),那么begin=1,end=总页数 否则 使用公式计算;begin=pc-5, end=pc + 4; 两种特殊情况: 头溢出:当begin<1时,让begin=1 尾溢出:当end>${tp}时,让end=${tp} --%>
${i }
[${i }]
下一页
尾页
哦了多余的话我就不解释了,我想你看过这段代码之后会明白的吧。

那摩接下来让我们来写一个service和dao就算完事了,service我就不说了我们直接来看dao吧

public List
findAll(int index,int length) { String sql = "select * from t_customer limit ?,?"; List
l = null; Object[] p = {index,length}; try { l = queryRunner.query(sql, new BeanListHandler
(Customer.class),p); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return l; }
public int count() {		String sql = "select count(*) from t_customer";		Number n = null;		try {			n = (Number)queryRunner.query(sql, new ScalarHandler());					} catch (SQLException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return n.intValue();	}

是滴,全部查找就是这摸简单,只要还是得利用当前行数,和每页记录数

哦了

有人会问我getUrl()方法是什么鬼,还有encoding()方法又是你妈什么?

应为我们是使用get提交的所以会造成乱码,嗯对,我们获取的customer对象他爹都不认识他,我们的encoding方法就是用来进行解码的

//这是其中的一个,其他的属性也如同if(c.getCname() != null && !c.getCname().trim().isEmpty()) {			byte[] b = null;			try {				b = c.getCname().getBytes("iso-8859-1");			} catch (UnsupportedEncodingException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			String name=null;			try {				name = new String(b,"utf-8");			} catch (UnsupportedEncodingException e) {				// TODO Auto-generated catch block				e.printStackTrace();			}			c.setCname(name);		}

getUrl是用来获取参数路径并去除&cp参数的:

private String getUrl(HttpServletRequest request) {		//String c = request.getContextPath();		String q = request.getQueryString();		String s = request.getServletPath();				if(q != null && !q.trim().isEmpty()) {			if( q.contains("&cp=")) {				int i = q.indexOf("&cp=");				q = q.substring(0, i);			}		}		String url =  s + "?" + q;		return url;	}
哦了,大致的技术点我们就鸡巴说没了,让我们提升点难度,试试多条件查询:

//多条件查询的servlet方法public String query(HttpServletRequest request, HttpServletResponse response)			throws ServletException, IOException {				Customer customer = new Customer();				try {			BeanUtils.populate(customer,request.getParameterMap());		} catch (IllegalAccessException e) {			// TODO Auto-generated catch block			e.printStackTrace();		} catch (InvocationTargetException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}				Customer c = encoding(customer);						PageBean
pb = new PageBean
(); if(request.getParameter("cp") != null && !request.getParameter("cp").trim().isEmpty()) { int cp = Integer.parseInt(request.getParameter("cp")); pb.setCp(cp); } else { pb.setCp(1); } pb.setMd(10); pb.setPd(service.query(customer,pb.getCd(),pb.getMd())); pb.setDt(service.count()); String url = getUrl(request); pb.setUrl(url); request.setAttribute("pb",pb); return "f:list.jsp"; }
多条件查询的dao
public List
query(Customer customer ,int index,int length) { //我们将其参数放入ArrayList中 List
l = new ArrayList(); //我们使用StringBuffer连接我们所需要的条件 StringBuffer sql = new StringBuffer ("select * from t_customer where 1=1 "); if(customer.getCname() != null && !customer.getCname().trim().isEmpty()) { sql.append("and cname=? "); l.add(customer.getCname()); } if(customer.getBirthday() != null && !customer.getBirthday().trim().isEmpty()) { sql.append("and birthday=? "); l.add(customer.getBirthday()); } if(customer.getCellphone() != null && !customer.getCellphone().trim().isEmpty()) { sql.append("and cellphone=? "); l.add(customer.getCellphone()); } if(customer.getDescription() != null && !customer.getDescription().trim().isEmpty()) { sql.append("and description=? "); l.add(customer.getDescription()); } if(customer.getEmail() != null && !customer.getEmail().trim().isEmpty()) { sql.append("and email=? "); l.add(customer.getEmail()); } if(customer.getGender() != null && !customer.getGender().trim().isEmpty()) { sql.append("and gender=? "); l.add(customer.getGender()); } sql.append("limit ?,?"); l.add(index); l.add(length); List
lc= null; try { lc = queryRunner.query(sql.toString(), new BeanListHandler
(Customer.class), l.toArray()); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return lc; }

你可能感兴趣的文章
个人作业——软件产品案例分析
查看>>
JAVA_学习第二天(四)[ 逻辑运算符(&&)(||)(^)(~)]
查看>>
codeforces 55D 数位dp
查看>>
比特币:一种点对点的电子现金系统
查看>>
JAVA简单插入排序算法
查看>>
安全退出,清空Session或Cookie
查看>>
SGU[180] Inversions
查看>>
厄拉多塞筛(C语言)
查看>>
抽象数据类型的表示与实现
查看>>
【Python】循环语句
查看>>
SpringCloud微服务实战-Zuul路由网关
查看>>
C#优化
查看>>
Nutch1.2 的安装与使用
查看>>
一些基本公式和算法
查看>>
我和Django那些事儿(1)----与Django结缘
查看>>
DLP与上网行为管理的差别总结
查看>>
冬天防静电,绝对有效的办法
查看>>
树 List Leaves 【用数组模拟了树状结构建树+搜索叶子节点+按照特殊规律输出每个叶子节点】...
查看>>
Xcode 7.3 添加和配置pch文件?
查看>>
[黑科技]pb_ds库(G++)
查看>>